package com.thp.bigdata.logEnhance;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

/**
 * 数据库连接
 * java.sql包中的接口，它是sun公司为了简化，统一对数据库的操作，定义了一套java操作数据库的规范，
 * 由各个数据库公司自己实现，数据库有mysql oracle等，
 * 而com.mysql.jdbc包中的类是mysql自己实现规范接口的类，
 * 不同的数据库有不同的实现，为了能够只写一套代码，实现跨数据库使用，
 * 书写传统jdbc需要导入的包就使用java.sql包，而不用考虑具体的实现类。
 * @author 汤小萌
 *
 */
public class DBLoader {
	
	/**
	 * 从数据库中将url对应的内容全部放到HashMap中进行缓存
	 */
	public static void dbLoader(Map<String, String> urlContentMap) {
		Connection con = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/urldb", "root", "root");
			st = con.createStatement();
			rs = st.executeQuery("select url, content from url_rule");
			while(rs.next()) {
				urlContentMap.put(rs.getString(1), rs.getString(2));
			}
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			if(rs != null) {
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					rs = null;
				}
			}
			if(st != null) {
				try {
					st.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					st = null;
				}
			}
			if(con != null) {
				try {
					con.close();
				} catch (SQLException e) {
					e.printStackTrace();
				} finally {
					con = null;
				}
			}
		}
	}
	
	// 测试数据库连接成功
	public static void main(String[] args) {
		HashMap<String, String> urlContentMap = new HashMap<String, String>();
		dbLoader(urlContentMap);
		// Set<Entry<String, String>> entrySet = urlContentMap.entrySet();
		for(Entry<String, String> entrySet : urlContentMap.entrySet()) {
			System.out.println(entrySet.getKey() + " : " + entrySet.getValue());
		}
	}
}
